热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

文火|冰糖_[项目管理20]:流水线pipeline与项目管理

篇首语:本文由编程笔记#小编为大家整理,主要介绍了[项目管理-20]:流水线pipeline与项目管理相关的知识,希望对你有一定的参考价值。作者主页(文火冰糖的硅基工坊)

篇首语:本文由编程笔记#小编为大家整理,主要介绍了[项目管理-20]:流水线pipeline与项目管理相关的知识,希望对你有一定的参考价值。


作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:



目录

第1章 什么是流水线pipeline技术

1.1 工业流水线的思路

1.2 CPU执行指令的流水线技术

第2章 流水线与软件开发流程

2.1 软件开发过程的划分

2.2 传统的非流水线的软件开发模式:瀑布式开发

2.3 敏捷开发模式:流水线开发

第3章 流水线与项目管理


第1章 什么是流水线pipeline技术


1.1 工业流水线的思路

先以汽车装配为例来解释流水线的工作方式。假设装配一辆汽车需要4个步骤:

1.冲压:制作车身外壳和底盘等部件;

2.焊接:将冲压成形后的各部件焊接成车身;

3.涂装:将车身等主要部件清洗、化学处理、打磨、喷漆和烘干;

4.总装:将各部件(包括发动机和向外采购的零部件)组装成车;

同时对应地需要冲压、焊接、涂装和总装四个工人。

如果不采用流水线,那么第一辆汽车依次经过上述四个步骤装配完成之后,下一辆汽车才开始进行装配,最早期的工业制造就是采用的这种原始的方式。未采用流水线的原始制造方式,同一时刻只有一辆汽车在装配。不久之后就发现,某个时段中一辆汽车在进行装配时,其它三个工人处于闲置状态,显然这是对资源的极大浪费。

于是开始思考能有效利用资源的方法:在第一辆汽车经过冲压进入焊接工序的时候,立刻开始进行第二辆汽车的冲压,而不是等到第一辆汽车经过全部四个工序后才开始。之后的每一辆汽车都是在前一辆冲压完毕后立刻进入冲压工序,这样在后续生产中就能够保证四个工人一直处于运行状态,不会造成人员的闲置。这样的生产方式就好似流水川流不息,因此被称为流水线。

采用流水线的制造方式,同一时刻四辆汽车在装配。


1.2 CPU执行指令的流水线技术

 流水线(pipeline)技术是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。

流水线是Intel首次在486芯片中开始使用的。

在CPU中由5—6个不同功能电路单元组成一条指令处理流水线,然后将一条指令分成5—6步后再由这些电路单元分别执行,这样就能实现在一个CPU时钟周期完成一条指令,因此提高CPU的运算速度。

经典奔腾每条整数流水线都分为四级流水,即取指令、译码、执行、写回结果。浮点流水又分为八级流水。

如果没有流水线,则必须操作完一个完整的指令后,才能操作下一条指令,在取指令时,其他单元是空闲的,同理,在执行指令时,译码和回写单元是空闲的,这就是资源的浪费。

采用流水线技术,可以把执行指令分成n道流水线步骤,这样可以并行地操作多条指令,在执行A指令时,就可以译码B指令,同时取C指令,这样可以提升CPU执行指令的效率。

CPU的工作也可以大致分为指令的获取、解码、运算和结果的写入四个步骤,采用流水线设计之后,指令(好比待装配的汽车)就可以连续不断地进行处理。在同一个较长的时间段内,显然拥有流水线设计的CPU能够处理更多的指令。


第2章 流水线与软件开发流程


2.1 软件开发过程的划分

把软件的开发过程分如下的一些步骤:


  • 可行性调研
  • 需求调研
  • 竞品分析
  • 产品设计
  • 需求评审
  • 用例设计
  • 原型评审
  • 设计评审
  • 研发需求确认
  • TC评审
  • 研发排期(表结构设计、开发接口、合并代码、自测、联调、部署)
  • 功能验收
  • 产品推广
  • 部署交付

软件的功能特征的开发步骤,类似于CPU执行指令的步骤,类似安装汽车的步骤。

软件的功能特征,类似与CPU执行的一个个指令,类似与产线上的一台台汽车。

每个环境的功能和开发人员,相当于执行单元:取指令单元、解码指令单元、执行指令单元等等。

如何进行软件功能的开发就存在两种思路:

(1)传统的串行模式

(2)最新的敏捷模式


2.2 传统的非流水线的软件开发模式:瀑布式开发

在瀑布开发模式下,软件开发过程是串行的。

在计划阶段,为所有N个功能统一计划。

在需求分析阶段,为所有N个功能进行需求分析,之后全部完成,才能进入下一个阶段。

在设计阶段也是如此,最后,所有的N个功能都通过测试,才能进入运行维护。


2.3 敏捷开发模式:流水线开发

敏捷开发模式,把个复杂的功能需求,分解成一个个独立的子功能需求,每个只功能需求独立开发。且子功能需求之间,各种独立,且并行开发。类似与CPU的流水线。

这样,软件的功能生产就是按照流水线的方式进行,每天都有新的小的功能增量。如下图所示。


迭代任务:就是一个个 独立的指令,就是一个个小的、可执行的功能。

开发、测试、发布,就是一个个CPU内部的功能单元。

可工作软件,就是一个个CPU执行指令的结果。

在上图中,迭代周期是一周,也就是说,每一周,都有一部分输出。

这样,就持续不断的有新的功能产生,如下图所示。

并行执行(开发)任务/功能特征的个数取决于如下几个因素:

(1)开发流程被切分的步骤:

在每个步骤处理能力一定的情况下,子步骤越多,并行执行的子任务就越多。

(2)每个步骤的处理能力:

在子步骤数量确定的情况下,每个步骤处理的子任务越多(开发团队的数量),并行执行的任务越多。


第3章 流水线与项目管理

在流水线软件开发过程的基础之上,再进一步对项目管理的其他活动进行流水线划分

这就是流水线项目管理。流水线项目管理中,涉及到如下的因素

(1)把软件开发过程按照时间或逻辑的先后顺序分成一个个可以独立实施步骤。

(2)把大型的软件功能,拆分成一个个在2周内可以完成的task

(3)把软件项目管理过程按照时间或逻辑的先后顺序分成一个个可以独立实施步骤。

(4)复杂的项目管理活动,拆分成一个个在2周内可以完成的task。

(5)无论是拆分这个动作、还是最终的软件功能活动,还是项目管理活动,都需要人来完成,就相当于CPU某个执行单元。

(6)人与CPU执行单元不同的是:


  • “人”在项目中的可用性,并不是项目所决定的,而是有职能部门所决定的。
  • ”人“同时为多个项目提供支持,因此,一个项目必须提前N个迭代周期与职能部门对所需要的人力资源进行预约。如果在期望的时间内,无法提供可用的人力资源(包括项目管理人员和软件开发人员),进入流水线管道的task就会受阻。
  • 提前预约,提取申请人力资源,管道式项目管理必须正视的因素,这是影响项目流水线执行的最重要的因素。
  • 只有预先分配资源,项目流水线才能畅通无阻的运行起来。
  • 只有有了人,才能执行项目管理活动,才能对复杂软件的功能呢进行切分,只有有了人,才能持续不断的发布的子功能。没有人,整个流水线都会停止。

如下是项目流水线 pipeline backlog的案例:



推荐阅读
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 树莓派Linux基础(一):查看文件系统的命令行操作
    本文介绍了在树莓派上通过SSH服务使用命令行查看文件系统的操作,包括cd命令用于变更目录、pwd命令用于显示当前目录位置、ls命令用于显示文件和目录列表。详细讲解了这些命令的使用方法和注意事项。 ... [详细]
  • 本文介绍了基于c语言的mcs51单片机定时器计数器的应用教程,包括定时器的设置和计数方法,以及中断函数的使用。同时介绍了定时器应用的举例,包括定时器中断函数的编写和频率值的计算方法。主函数中设置了T0模式和T1计数的初值,并开启了T0和T1的中断,最后启动了CPU中断。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文讨论了在iOS平台中的Metal框架中,对于if语句中的判断条件的限制和处理方式。作者提到了在Metal shader中,判断条件不能写得太长太复杂,否则可能导致程序停留或没有响应。作者还分享了自己的经验,建议在CPU端进行处理,以避免出现问题。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 关于CMS收集器的知识介绍和优缺点分析
    本文介绍了CMS收集器的概念、运行过程和优缺点,并解释了垃圾回收器的作用和实践。CMS收集器是一种基于标记-清除算法的垃圾回收器,适用于互联网站和B/S系统等对响应速度和停顿时间有较高要求的应用。同时,还提供了其他垃圾回收器的参考资料。 ... [详细]
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
author-avatar
mobiledu2502855247
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有